﻿using System;
using System.Web;
using MIAP.Negocio.Autenticacion;
using MIAPWEB.Common;


namespace MIAPWEB
{
    public partial class Login : System.Web.UI.Page
    {
        /// <summary>
        /// Clase de negocio de la página.
        /// </summary>
        private readonly AutenticacionNegocio _autenticacionBusiness;

        #region Constructors

        /// <summary>
        /// Inicializa una nueva instancia de la clase <see cref="Login"/>.
        /// </summary>
        protected Login()
        {
            this._autenticacionBusiness = new AutenticacionNegocio();
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            this.ValidateCredential();
        }

        /// <summary>
        /// Ejecuta la validación de la credencial de usuario especificada y en caso de ser valida inicia sesión dentro del sistema.
        /// </summary>
        private void ValidateCredential()
        {
            try
            {
                //obtenemosel nombre del usuario actual
                var userName = HttpContext.Current.User.Identity.Name.Split('\\')[1];

                //obtenemos el usuario y lo validamos
                this._autenticacionBusiness.ValidateUserAccount(userName);

                var userInfo = this._autenticacionBusiness.GetUsuarioByCredential(userName);
                var perfiles = this._autenticacionBusiness.GePermissionsByUsuario(userInfo.IdUsuario);
                AppSessionManager.Instance.SetSessionUserInfo(userInfo, perfiles);

                Response.Redirect(AppUrls.Default, false);
            }
            catch (Exception ex)
            {
                // Credencial invalida. Inicio de sesión denegado.
                switch (ex.Message)
                {
                    case AutenticacionNegocio.InvalidAccount:
                        Response.Redirect(AppUrls.ErrorLogin, false);
                        break;

                    case AutenticacionNegocio.DisabledAccount:
                        Response.Redirect(AppUrls.ErrorLogin, false);
                        break;

                    default:
                        throw;
                }
            }
        }
    }
}